1 Introducción
La delincuencia en la Ciudad México siempre ha representado un gran problema y fuente de desconfianza para todos los capitalinos. Desafortunadamente, no todos los delitos son denunciados y por consecuencia no se cuenta con carpeta de investigación ni registro alguno del mismo. A pesar de los esfuerzos de las autoridades para facilitar medios para presentar denuncias de manera digital, se estima que alrededor del 94% de los delitos no se denuncian (Zepeda, 2017). El objetivo del presente trabajo es analizar las víctimas que cuentan con una carpeta de investigación de la Ciudad de México para determinar las características de estos delitos.
1.1 Ambiente de R
Para el análisis de los datos se utilizaron las librerías que se muestran a continuación:
plotly-> animación de gráficas.tidyverse-> carga de archivos csv, creación de gráficas y manipulación de tablas.lubridate-> manejo de fechas.openxlsx-> carga de archivos de excel.kableExtra-> diseño de tablas.sf-> leer archivos shp para el mapa.moments-> asimetría y curtosis.gganimate-> gráficas animadas con el tiempo.wordcloud-> nube de palabras.
library(plotly)
library(tidyverse)
library(lubridate)
library(openxlsx)
library(kableExtra)
library(sf)
library(moments)
library(gganimate)
library(wordcloud2)1.2 Conjunto de datos
Los conjuntos de datos utilizados en el presente análisis se pueden descargar en Víctimas en carpetas de investigación y Diccionario de víctimas dentro del Portal de Datos Abiertos de la CDMX. Para mayor información del conjunto de datos se puede consultar en Víctimas en carpetas de investigación FGJ.
La base contiene la información de las víctimas de diversos delitos que cuentan con una carpeta de investigación en la Fiscalía General de Justicia (FGJ) de la Ciudad de México a partir de enero del año 2019.
1.2.1 Descarga
data_url <- "https://archivo.datos.cdmx.gob.mx/fiscalia-general-de-justicia/victimas-en-carpetas-de-investigacion-fgj/victimas_completa_julio_2021.csv"
victimas <- read_csv(data_url, show_col_types = FALSE)
dicc_url <- "https://datos.cdmx.gob.mx/dataset/7593b324-6010-44f7-8132-cb8b2276c842/resource/10235569-f4a9-4876-9465-9780887df8e2/download/diccionario-de-victimas-actualizado.xlsx"
diccionario <- read.xlsx(dicc_url, sheet =1)1.2.2 Formato de columnas
victimas$Mes_inicio <- as.factor(victimas$Mes_inicio)
victimas$FechaInicio <- dmy(victimas$FechaInicio)
victimas$Delito <- as.factor(victimas$Delito)
victimas$Categoria <- as.factor(victimas$Categoria)
victimas$Sexo <- as.factor(victimas$Sexo)
victimas$TipoPersona <- as.factor(victimas$TipoPersona)
victimas$CalidadJuridica <- as.factor(victimas$CalidadJuridica)
victimas$competencia <- as.factor(victimas$competencia)
victimas$Mes_hecho <- as.factor(victimas$Mes_hecho)
victimas$FechaHecho <- dmy(victimas$FechaHecho)
victimas$AlcaldiaHechos <- as.factor(victimas$AlcaldiaHechos)1.2.3 Descripción de las variables
diccionario[,1:2] %>%
kable()| Nombre.de.variable | Definición |
|---|---|
| idCarpeta | Número entero que representa el identificador único usado por PGJ asociado a cada carpeta de investigación dentro de su sistema. |
| Delito | Es la conducta, acción u omisión típica (descrita por la ley), antijurídica (contraria a la ley) y culpable, a la que le corresponde una sanción. |
| Categoria | Las carpetas de investigación se clasifican en función del tipo de delito cometido, los cuales se dividen en 16 tipos. |
| FechaHecho | Día y hora en que se cometió el delito, según el reporte de la víctima. |
| HoraHecho | Hora y minuto en que se cometió el delito, según el reporte de la víctima. |
| FechaInicio | Día y hora en que se hizo la denuncia para iniciar la carpeta de investigación. |
| HoraInicio | Hora y minuto en que se hizo la denuncia para iniciar la carpeta de investigación. |
| Año_hecho | Año en que se cometió el delito, según el reporte de la víctima. |
| Mes_hecho | Mes en que se cometió el delito, según el reporte de la víctima. |
| Año_inicio | Año en que se hizo la denuncia para inciar la carpeta de investigación. |
| Mes_inicio | Mes en que se hizo la denuncia para inciar la carpeta de investigación. |
| Sexo | Sexo de la víctima del delito reportado. |
| Edad | Edad de la víctima del delito reportado en la carpeta de investigación. |
| TipoPersona | Cómo se reconoce a el o los denunciantes al ser sujetos de obligaciones y derechos salvaguardados legislación penal vigente. |
| CalidadJuridica | Título con el que se registra y se identifica a la persona, física o moral, en la carpeta de investigación. |
| Competencia | Variable categórica a través de la cuál se clasifican los hechos según su naturaleza. Hechos no delictivos corresponde a aquellos que son denunciados a la PGJ pero no constituyen un delito en sí mismos como por ejemplo un suicidio. Incompetencias son aquellos hechos delictivos que suceden fuera de la Ciudad de México y son denunciados a la PGJ de la Ciudad de México, por lo que no se deben tomar en cuenta como incidencia delictiva propia de la ciudad. Fuero común son los delitos que ocurren y se denuncian dentro de la Ciudad de México. |
| lon | Longitud de la geolocalización, uno de dos elemento que componen la referencia angular que permite localizar el lugar donde se cometió el delito. WGS84 |
| lat | Latitud de la geolocalización, uno de dos elemento que componen la referencia angular que permite localizar el lugar donde se cometió el delito. WGS84 |
| AlcaldiaHechos | Alcaldía en que se cometió el delito, según el reporte de la víctima. Notar que puede ser fuera de la CDMX. |
| ColoniaHechos | Colonia en que se cometió el delito, según el reporte de la víctima. Notar que puede ser fuera de la CDMX. |
| Calle_hechos | Calle en que se cometió el delito, según el reporte de la víctima. |
| Calle_hechos2 | Calle secundaria en que se cometió el delito, según el reporte de la víctima. |
2 Análisis exploratorio
2.1 Estadísticos
victimas %>%
select(Año_inicio, Sexo, Edad) %>%
rename('Año inicio'=Año_inicio) %>%
filter(!is.na(Edad), !is.na(Sexo), Edad>0, Edad<150) %>%
group_by(`Año inicio`, Sexo) %>%
summarise(Media = round(mean(Edad),2),
SD = round(sd(Edad),2),
Mediana = median(Edad),
Asimetría = round(skewness(Edad),2),
Curtosis = round(kurtosis(Edad),2),
#IQR = IQR(Edad),
Mínimo = min(Edad),
Máximo = max(Edad)) %>%
kable()| Año inicio | Sexo | Media | SD | Mediana | Asimetría | Curtosis | Mínimo | Máximo |
|---|---|---|---|---|---|---|---|---|
| 2019 | Femenino | 38.30 | 16.39 | 36 | 0.42 | 2.95 | 1 | 100 |
| 2019 | Masculino | 39.87 | 15.55 | 38 | 0.41 | 2.91 | 1 | 111 |
| 2020 | Femenino | 37.93 | 16.37 | 36 | 0.42 | 2.94 | 1 | 103 |
| 2020 | Masculino | 39.80 | 15.88 | 38 | 0.37 | 2.95 | 1 | 114 |
| 2021 | Femenino | 37.77 | 16.41 | 36 | 0.46 | 3.02 | 1 | 120 |
| 2021 | Masculino | 40.02 | 16.10 | 38 | 0.35 | 2.93 | 1 | 103 |
2.2 Delitos
2.2.1 Nube de palabras
Los delitos en la Ciudad de México que se denuncian con una mayor frecuencia se muestran a continuación con el tamaño de letra más grande.
2.2.2 Mapa
if (!dir.exists("datos_mapa")) {
map_url <- "https://github.com/prestevez/covid-19-mx-map/raw/master/datos_covid/01_32_mun.zip"
download.file(map_url, destfile = "datos_mapa.zip")
unzip("datos_mapa.zip", exdir = "datos_mapa")
file.remove("datos_mapa.zip")
}
mex_map <-
st_read("datos_mapa/01_32_mun.shp", quiet = TRUE) %>%
st_set_crs("+proj=lcc +lat_1=17.5 +lat_2=29.5 +lat_0=12 +lon_0=-102 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs") %>%
filter(CVE_ENT == "09") %>%
rename(Alcaldia = NOMGEO)
mex_map$Alcaldia <- chartr("ÁÉÍÓÚ", "AEIOU",
toupper(mex_map$Alcaldia))
map_filt <-
victimas %>%
select(AlcaldiaHechos) %>%
group_by(AlcaldiaHechos) %>%
tally(name = "Delitos") %>%
na.omit() %>%
arrange(desc(Delitos))
map_filt$AlcaldiaHechos <-
str_replace(map_filt$AlcaldiaHechos,
"GUSTAVO A MADERO", "GUSTAVO A. MADERO")
mex_map_del <-
left_join(mex_map, map_filt,
by = c("Alcaldia" = "AlcaldiaHechos")) %>%
rename(Alcaldía = Alcaldia)
rm(mex_map)
map <-
ggplot() +
geom_sf(data = mex_map_del,
aes(fill = Delitos, shape = Alcaldía),
colour = "grey75", size = 0.1) +
labs(title = "Cantidad de delitos por alcaldía en la CDMX",
x = "longitud",
y = "latitud") +
theme_bw() +
scale_fill_gradient("Total de delitos",
high = "red", low = "yellow") +
theme(legend.position = "none")
ggplotly(map, tooltip = c("Delitos","Alcaldía"),
dynamicTicks = TRUE, width = 800)Como en cualquier ciudad del mundo, hay zonas que son más peligrosas y presentan una mayor cantidad de delitos. Para el caso de la CDMX, las tres alcaldías más peligrosas son:
- IZTAPALAPA con 96717 delitos registrados.
- CUAUHTEMOC con 88614 delitos registrados.
- GUSTAVO A. MADERO con 63730 delitos registrados.
2.2.3 Paleta
Como es de esperarse, los días que presentan una menor cantidad de delitos son durante el fin de semana.
loli_data <-
data.frame(día = as.character(wday(victimas$FechaHecho,
label = TRUE, abbr = FALSE))) %>%
group_by(día) %>%
tally() %>%
na.omit() %>%
rename(delitos = n)
loli <-
loli_data %>%
ggplot(aes(x=día, y=delitos)) +
geom_segment(aes(xend=día, yend=0)) +
geom_point(size=4, color= "#189c54") +
theme_bw() +
labs(title = "Total de delitos por día de la semana",
x = "día de la semana",
y = "total de delitos")
ggplotly(loli, width = 800)2.2.4 Mapa de calor
A pesar de que el mes parece no representar una gran influencia dentro del tipo de delito, podemos apreciar que los primeros meses del año tienen un ligero aumento respecto a los demás.
heat <-
victimas %>%
select(Mes_hecho, Categoria) %>%
filter(!is.na(Mes_hecho)) %>%
group_by(Mes_hecho, Categoria) %>%
tally() %>%
arrange(Categoria) %>%
ggplot(aes(x=factor(Mes_hecho,
levels = c("Enero","Febrero","Marzo",
"Abril","Mayo","Junio",
"Julio","Agosto","Septiembre",
"Octubre","Noviembre",
"Diciembre")),
y=Categoria, fill=n)) +
geom_tile() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45)) +
scale_y_discrete(labels=
substr(unique(sort(victimas$Categoria)),0,20)) +
scale_fill_gradient(low = "yellow", high = "red") +
labs(title = "Tipo de delito respecto a cada mes",
x = "mes",
y = "tipo de delito")
ggplotly(heat, dynamicTicks = TRUE, width = 800)2.3 Víctimas
2.3.1 Densidad
Podemos observar que la mayoría de las personas que son víctimas de delitos se encuentran entre las edades 27 y 49.
dens <-
victimas %>%
filter(Edad < 150, Edad>0) %>%
ggplot() +
geom_density(aes(x=Edad,fill=factor(Año_inicio),
color=factor(Año_inicio)),
alpha=0.5, size=1, stat = "count") +
labs(title = "Densidad de la edad por año",
x = "edad",
y = "cantidad de personas",
fill = "Año",
color = "")
ggplotly(dens, tooltip = c("count", "Edad"),
dynamicTicks = TRUE, width = 800)2.3.2 Cajas y bigotes
box <-
victimas %>%
filter(Edad<150) %>%
ggplot() +
geom_boxplot(aes(x = factor(Año_inicio),y = Edad,
color = factor(Año_inicio))) +
labs(title = "Distribución de la edad en cada año",
x = "año de la carpeta",
y = "edad") +
theme(legend.position = "none")
ggplotly(box, dynamicTicks = TRUE, width = 800)2.3.3 Histograma
histo <-
victimas %>%
filter(!is.na(Sexo), !is.na(CalidadJuridica)) %>%
arrange(CalidadJuridica) %>%
ggplot() +
geom_histogram(aes(Sexo, fill = CalidadJuridica),
stat = "count") +
facet_grid(Año_inicio~.) +
coord_flip() +
labs(title = "Calidad jurídica de las víctimas",
x = "calidad jurídica",
y = "cantidad de delitos",
fill = "") +
theme(axis.text.y = element_text(angle = 70))
ggplotly(histo, width = 800) %>%
layout(legend = list(x = 1.05,
title =list(text= "Calidad jurídica")))Podemos apreciar que la cantidad de delitos han disminuido a lo largo del tiempo y que la mayoría de las personas que denuncian tienen calidad jurídica de VICTIMA Y DENUNCIANTE. Además, cada vez hay más paridad de género entre entre los delitos denunciados.
2.3.4 Línea
Veamos cómo se comportan los delitos a través del tiempo de acuerdo con cada categoría.
line<-
victimas %>%
group_by(Categoria, FechaInicio) %>%
tally() %>%
ggplot() +
geom_line(aes(x = FechaInicio, y = n, color=Categoria)) +
#theme(legend.position = "bottom") +
labs(title = "Delitos a través del tiempo",
x = "fecha",
y = "cantidad de delitos")
ggplotly(line, dynamicTicks = TRUE, width = 800) %>%
layout(legend = list(x = 1, y = 1,
font = list(size = 8)))2.3.5 Pastel
A continuación se muestra la proporción de distintas variables categóricas con información de las víctimas.
pie1 <-
victimas %>%
select(CalidadJuridica) %>%
group_by(CalidadJuridica) %>%
tally() %>%
na.omit() %>%
plot_ly(labels = ~CalidadJuridica, values = ~n, type = 'pie',
width = 800) %>%
layout(title = "Proporción de la calidad jurídica de las personas")
pie1pie2 <-
victimas %>%
select(competencia) %>%
group_by(competencia) %>%
tally() %>%
na.omit() %>%
plot_ly(labels = ~competencia, values = ~n, type = 'pie',
width = 800) %>%
layout(title = "Proporción de la clasificación de los hechos")
pie2pie3 <-
victimas %>%
select(TipoPersona) %>%
group_by(TipoPersona) %>%
tally() %>%
na.omit() %>%
plot_ly(labels = ~TipoPersona, values = ~n, type = 'pie',
width = 800) %>%
layout(title = "Proporción del tipo de persona")
pie3pie4 <-
victimas %>%
select(Sexo) %>%
group_by(Sexo) %>%
tally() %>%
na.omit() %>%
plot_ly(labels = ~Sexo, values = ~n, type = 'pie',
width = 800) %>%
layout(title = "Proporción del sexo de las víctimas")
pie42.4 Denuncia
2.4.1 Barras
bar_data <-
victimas %>%
mutate(tiempo = difftime(FechaInicio, FechaHecho,
units = "days")) %>%
group_by(Categoria) %>%
summarise(tiempo = mean(tiempo, na.rm = TRUE)) %>%
arrange(Categoria)
bar <-
bar_data %>%
ggplot() +
geom_bar(aes(x=Categoria, y=tiempo, fill = Categoria),
stat = "identity") +
coord_flip() +
labs(title = "Promedio del tiempo entre hecho y denuncia por tipo de delito",
x = "tipo de delito",
y = "tiempo promedio entre el delito y la denuncia") +
theme(legend.position = "none")+
scale_x_discrete(labels=
substr(unique(sort(victimas$Categoria)),0,20))
ggplotly(bar, tooltip = c("tiempo"), dynamicTicks = TRUE,
width = 800)El delito que tarda más tiempo en denunciarse desde que ocurrió es: VIOLACIÓN
2.4.2 Dispersión
Podemos observar que conforme avanza el tiempo se presenta una mayor cantidad de delitos con una mayor separación entre el momento que ocurrió el hecho y el momento de la denuncia.
scat <-
victimas %>%
mutate(inicio_vs_hecho = difftime(FechaInicio, FechaHecho,
units = "days")) %>%
filter(Edad<150, Edad>0, Categoria == "VIOLACIÓN",
!is.na(Sexo)) %>%
ggplot() +
geom_point(aes(x=Edad, y=inicio_vs_hecho, color = Sexo)) +
labs(title = "Días desde el hecho a la denuncia por edad",
subtitle = 'Fecha: {frame_time}',
x = "edad",
y = "días desde que ocurre el hecho hasta que se denuncia") +
ylim(0,5000) +
transition_time(FechaInicio) +
ease_aes('linear')
animate(scat, duration = 40, width = 800)A pesar de que aparentemente el tiempo en que se denuncia un delito se ha encontrado en aumento a través del tiempo, no necesariamente se debe a que a las personas les importa menos levantar una denuncia. Al contrario, más gente se está sumando a emitir su denuncia por delitos que ocurrieron hace mucho tiempo para poder reclamar justicia.